﻿using System.ComponentModel;
using System.Windows.Data;
using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.Regions;
using Tanmia.Basis.ViewInterface;
using Tanmia.Basis.ViewModel;
using Tanmia.Warehouse.Core;
using Tanmia.Warehouse.Domain;
using System.Collections.Specialized;

namespace Tanmia.Warehouse.Presentation.Scenarios
{
    [ViewInfo("تحرير المواد", "المادة هي المكون الأساسي في المستودعات, في نظام تنمية للإدارة المستودعات يمكن للمادة أن تتحرك داخل المستودعات بعدة طرق مضبوطة مسبقاً وذلك لضمان معالجة كافة أنواع المواد من حيث طريقة عملها.", Constants.RegionEditor, Views.ItemEditor)]
    public class ItemEditorViewModel : EditorViewModel<Item>
    {
        public ItemCategoryDomain ItemCategoryObj { get; private set; }
        public UnitDomain UnitObj { get; private set; }

        public ICollectionView ItemCategories { get; private set; }
        public ICollectionView BaseUnits { get; private set; }
        public ICollectionView Units { get; private set; }

        public ItemEditorViewModel(IShellView shellView, IRegionManager regionManager, IEventAggregator eventAggregator, IBusinessEntityNavigator<Item> entityNavigator, IMessageService messageService,
            ItemDomain itemObj, ItemCategoryDomain itemCategoryObj, UnitDomain unitObj)
            : base(shellView, regionManager, eventAggregator, entityNavigator, messageService, itemObj)
        {
            EntityName = "Item";

            ItemCategoryObj = itemCategoryObj;
            UnitObj = unitObj;
            
            ItemCategories = CollectionViewSource.GetDefaultView(ItemCategoryObj.Gets());
            BaseUnits = CollectionViewSource.GetDefaultView(UnitObj.Gets());
            Units = CollectionViewSource.GetDefaultView(UnitObj.Gets());
            ItemCategoryObj.CloseSession();
            UnitObj.CloseSession();
        }

        protected override void OnClose()
        {
            base.OnClose();
            Dispose();
        }

        public override void Dispose()
        {
            base.Dispose();
            ItemCategoryObj.CloseSession();
            UnitObj.CloseSession();
        }
    }
}
